/*******************************************************************************
* Copyright (c) 2009 EclipseSource and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.osgi.services.discovery;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.internal.osgi.services.discovery.ServicePropertyUtils;
import org.osgi.service.discovery.ServiceEndpointDescription;
import org.osgi.service.discovery.ServicePublication;
public abstract class ECFServiceEndpointDescription implements
ServiceEndpointDescription {
private final Map serviceProperties;
public ECFServiceEndpointDescription(Map properties) {
this.serviceProperties = properties;
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getEndpointID()
*/
public String getEndpointID() {
Object o = serviceProperties.get(
ServicePublication.PROP_KEY_ENDPOINT_ID);
if (o instanceof String) {
return (String) o;
}
return null;
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getEndpointInterfaceName(java.lang.String)
*/
public String getEndpointInterfaceName(String interfaceName) {
if (interfaceName == null)
return null;
Object o = serviceProperties.get(
ServicePublication.PROP_KEY_ENDPOINT_INTERFACE_NAME);
if (o == null || !(o instanceof String)) {
return null;
}
String intfNames = (String) o;
Collection c = ServicePropertyUtils.createCollectionFromString(intfNames);
if (c == null)
return null;
for (Iterator i = c.iterator(); i.hasNext();) {
String intfName = (String) i.next();
if (intfName != null && intfName.startsWith(interfaceName)) {
// return just endpointInterfaceName
return intfName
.substring(
intfName.length()
+ ServicePropertyUtils.ENDPOINT_INTERFACE_NAME_SEPARATOR
.length()).trim();
}
}
return null;
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getLocation()
*/
public URL getLocation() {
Object o = serviceProperties.get(
ServicePublication.PROP_KEY_ENDPOINT_LOCATION);
if (o == null || !(o instanceof String)) {
return null;
}
String urlExternalForm = (String) o;
URL url = null;
try {
url = new URL(urlExternalForm);
} catch (MalformedURLException e) {
// XXX log to error
}
return url;
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getProperties()
*/
public Map getProperties() {
return serviceProperties;
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getProperty(java.lang.String)
*/
public Object getProperty(String key) {
return serviceProperties.get(key);
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getPropertyKeys()
*/
public Collection getPropertyKeys() {
return serviceProperties.keySet();
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getProvidedInterfaces()
*/
public Collection getProvidedInterfaces() {
Object o = serviceProperties
.get(
ServicePublication.PROP_KEY_SERVICE_INTERFACE_NAME);
if(o == null || !(o instanceof String)) {
throw new NullPointerException();
}
final String providedInterfacesStr = (String) o;
return ServicePropertyUtils.createCollectionFromString(providedInterfacesStr);
}
/* (non-Javadoc)
* @see org.osgi.service.discovery.ServiceEndpointDescription#getVersion(java.lang.String)
*/
public String getVersion(String interfaceName) {
Collection c = getProvidedInterfaces();
if (c == null) {
return null;
}
for (Iterator i = c.iterator(); i.hasNext();) {
String intfName = (String) i.next();
if (intfName != null && intfName.startsWith(interfaceName)) {
// return just version string
return intfName
.substring(
intfName.length()
+ ServicePropertyUtils.INTERFACE_VERSION_SEPARATOR
.length()).trim();
}
}
return null;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer sb = new StringBuffer("ServiceEndpointDescriptionImpl["); //$NON-NLS-1$
sb.append(";providedinterfaces=").append(getProvidedInterfaces()); //$NON-NLS-1$
sb.append(";location=").append(getLocation()); //$NON-NLS-1$
sb.append(";props=").append(getProperties()).append("]"); //$NON-NLS-1$ //$NON-NLS-2$
return sb.toString();
}
public abstract ID getECFEndpointID();
public long getFutureTimeout() {
return 30000L;
}
}